package in.lib.utils; import android.text.TextUtils; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; import in.model.SimpleUser; public class CodeUtils { private static String ARRAY_PATTERN_REGEX = "(\\w+)?(\\[[0-9,]+\\])"; private static Pattern ARRAY_PATTERN = Pattern.compile(ARRAY_PATTERN_REGEX); private static String FUNCTION_PATTERN_REGEX = "(\\w+)\\s?\\((((\\w+)?(\\s+)?(,\\s?)*?)+)\\)"; private static Pattern FUNCTION_PATTERN = Pattern.compile(FUNCTION_PATTERN_REGEX); /** * Parser for name and username in post items * @param code The input string * @param user The user object to match with * @return The formatted name as array. First cell represents the first view * and the send, represents the second view */ public static String[] compileUserTitle(String code, SimpleUser user) { code = code.replaceAll("(\\#\\{username\\})", user.getUsername()); code = code.replaceAll("(\\#\\{firstname\\})", user.getFirstName()); code = code.replaceAll("(\\#\\{lastname\\})", user.getLastName()); code = code.replaceAll("(\\#\\{fullname\\})", user.getFullname()); Matcher m = ARRAY_PATTERN.matcher(code); while (m.find()) { String match = m.group(); String str = match.substring(0, match.indexOf('[')); if (TextUtils.isEmpty(str)) { code = code.replace(match, ""); } else { String[] indexes = match.substring(match.indexOf('[') + 1, match.indexOf(']')).split("[,]"); StringBuilder formatted = new StringBuilder(indexes.length); for (String index : indexes) { try { int idx = Integer.parseInt(index); if (idx >= 0 && idx < str.length()) { formatted.append(str.charAt(idx)); } } catch (Exception e){} } code = code.replace(match, formatted.toString()); } } m = FUNCTION_PATTERN.matcher(code); while (m.find()) { String match = m.group(); String function = match.substring(0, match.indexOf('(')); String[] params = match.substring(match.indexOf('(') + 1, match.indexOf(')')).split("[,]"); StringBuilder formattedParam = new StringBuilder(40); if (params.length > 0) { if (function.equalsIgnoreCase("uc")) { for (String param : params) { if (TextUtils.isEmpty(param)) continue; formattedParam.append(String.valueOf(param.charAt(0)).toUpperCase(Locale.getDefault())); if (param.length() > 1) { formattedParam.append(param.substring(1, param.length())); } formattedParam.append(" "); } formattedParam = formattedParam.replace(0, formattedParam.length() - 1, ""); } else if (function.equalsIgnoreCase("lc")) { for (String param : params) { if (TextUtils.isEmpty(param)) continue; formattedParam.append(param.toLowerCase()).append(" "); } formattedParam = formattedParam.replace(0, formattedParam.length() - 1, ""); } else if (function.equalsIgnoreCase("cap")) { for (String param : params) { if (TextUtils.isEmpty(param)) continue; formattedParam.append(param.toUpperCase(Locale.getDefault())); } formattedParam = formattedParam.replace(0, formattedParam.length() - 1, ""); } } code = code.replace(match, formattedParam.toString()); } if (code.indexOf('|') > -1) { String[] parts = code.split("[|]"); if (parts.length > 2) { String[] finalParts = new String[2]; finalParts[0] = parts[0].trim(); for (int index = 1; index < parts.length; index++) { finalParts[1] = (parts[index] + "|"); } finalParts[1] = finalParts[1].substring(0, finalParts[1].length() - 1).trim(); return finalParts; } else if (parts.length == 2) { return new String[]{parts[0].trim(), parts[1].trim()}; } } return new String[]{code.trim()}; } }